import request from "@/utils/request"
const MENU_BASE_URL = "/api/v1/menus"

const MenuAPI = {
  /** 获取当前用户的路由列表 */
  getRoutes() {
    return request<any, RouteVO[]>({
      url: `${MENU_BASE_URL}/routes`,
      method: "get",
    })
  },
  /** 获取菜单树形列表 */
  getList(queryParams: MenuQuery) {
    return request<any, MenuVO[]>({
      url: `${MENU_BASE_URL}`,
      method: "get",
      params: queryParams,
    })
  },
  /** 获取菜单下拉数据源 */
  getOptions(onlyParent?: boolean) {
    return request<any, OptionType[]>({
      url: `${MENU_BASE_URL}/options`,
      method: "get",
      params: { onlyParent },
    })
  },
  /** 获取菜单表单数据 */
  getFormData(id: number) {
    return request<any, MenuForm>({
      url: `${MENU_BASE_URL}/${id}`,
      method: "get",
    })
  },
  /** 新增菜单 */
  create(data: MenuForm) {
    return request({
      url: `${MENU_BASE_URL}`,
      method: "post",
      data,
    })
  },
  /** 修改菜单 */
  update(id: number, data: MenuForm) {
    return request({
      url: `${MENU_BASE_URL}/${id}`,
      method: "put",
      data,
    })
  },
  /** 删除菜单 */
  deleteById(id: number) {
    return request({
      url: `${MENU_BASE_URL}/${id}`,
      method: "delete",
    })
  },
}

export default MenuAPI

export interface MenuQuery {
  /** 搜索关键字 */
  keywords?: string
}
import type { MenuTypeEnum } from "@/enums/system/menu-enum"
export interface MenuVO {
  /** 子菜单 */
  children?: MenuVO[]
  /** 组件路径 */
  component?: string
  /** ICON */
  icon?: string
  /** 菜单ID */
  id?: string
  /** 菜单名称 */
  name?: string
  /** 父菜单ID */
  parentId?: string
  /** 按钮权限标识 */
  perm?: string
  /** 跳转路径 */
  redirect?: string
  /** 路由名称 */
  routeName?: string
  /** 路由相对路径 */
  routePath?: string
  /** 菜单排序(数字越小排名越靠前) */
  sort?: number
  /** 菜单类型 */
  type?: MenuTypeEnum
  /** 是否可见(1:显示0:隐藏) */
  visible?: number
}
export interface MenuForm {
  /** 菜单ID */
  id?: number
  /** 父菜单ID */
  parentId?: number
  /** 菜单名称 */
  name?: string
  /** 是否可见(1-是 0-否) */
  visible: number
  /** ICON */
  icon?: string
  /** 排序 */
  sort?: number
  /** 路由名称 */
  routeName?: string
  /** 路由路径 */
  routePath?: string
  /** 组件路径 */
  component?: string
  /** 跳转路由路径 */
  redirect?: string
  /** 菜单类型 */
  type?: MenuTypeEnum
  /** 权限标识 */
  perm?: string
  /** 【菜单】是否开启页面缓存 */
  keepAlive?: number
  /** 【目录】只有一个子路由是否始终显示 */
  alwaysShow?: number
  /** 其他参数 */
  params?: KeyValue[]
}
interface KeyValue {
  key: string
  value: string
}
export interface RouteVO {
  /** 子路由列表 */
  children: RouteVO[]
  /** 组件路径 */
  component?: string
  /** 路由属性 */
  meta?: Meta
  /** 路由名称 */
  name?: string
  /** 路由路径 */
  path?: string
  /** 跳转链接 */
  redirect?: string
}
export interface Meta {
  /** 【目录】只有一个子路由是否始终显示 */
  alwaysShow?: boolean
  /** 是否隐藏(true-是 false-否) */
  hidden?: boolean
  /** ICON */
  icon?: string
  /** 【菜单】是否开启页面缓存 */
  keepAlive?: boolean
  /** 路由title */
  title?: string
}
// ...existing code...
